﻿using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;
using System.Data.SqlClient;
using BasicForms;
using GeneralLibs;
using Lists;

namespace ReportGenerators.BanHang.ThongKeBanHangLe
{
    public partial class FrmThongKeBanLe : BasicForms.FrmClose
    {
        public FrmThongKeBanLe()
        {
            InitializeComponent();
        }

        private void FrmThongKeBanLe_Load(object sender, EventArgs e)
        {
            try
            {
                if (DesignMode) return;
                DataTable retTable = new DataTable();
                retTable.Columns.Add("ID", typeof(Guid));
                retTable.Columns.Add("UserName", typeof(string));
                retTable.Columns.Add("FullName", typeof(string));
                int index = 0;
                foreach (CustomSecurity.User obj in CustomSecurity.UserList.Instance.Values)
                {
                    retTable.Rows.Add(retTable.NewRow());
                    retTable.Rows[index]["ID"] = obj.ID;
                    retTable.Rows[index]["UserName"] = obj.UserName;
                    retTable.Rows[index]["FullName"] = obj.FullName;
                    index++;
                }
                cmbNhanVien.DataSource = retTable.DefaultView;
                cmbNhanVien.DisplayColumn = "FullName";
                cmbNhanVien.ValueColumn = "ID";
                cmbNhanVien.AddVisibleColumn("UserName", "UserName");
                cmbNhanVien.AddVisibleColumn("FullName", "Tên đầy đủ");

                cmbMayTinh.DataSource = Lists.DanhMucMayTinh.Instance.DataView;
                cmbMayTinh.DisplayColumn = "Ten";
                cmbMayTinh.ValueColumn = "ID";
                cmbMayTinh.AddVisibleColumn("ID", "ID của máy");
                cmbMayTinh.AddVisibleColumn("Ten", "Tên");

                cmbKyBaoCao.SelectedIndex = 17;

                if (CustomSecurity.User.CurUser != null) cmbNhanVien.EditValue = CustomSecurity.User.CurUser.ID;
                cmbMayTinh.EditValue = Lists.DanhMucMayTinh.Instance.GetByHardwareID(GeneralLibs.LocalSettings.HeThong.HardwareID).ID;

                chkLocTheoNhanVien.Checked = true;
                chkLocTheoMay.Checked = true;
            }
            catch (Exception ex)
            {
                BasicForms.FrmExceptionNotifier.ShowAndLog(ex);
            }
        }

        private void cmbKyBaoCao_SelectedIndexChanged(object sender, EventArgs e)
        {
            try
            {
                FrmThamSoBaoCao.ThietLapKhoangThoiGianBaoCao(cmbKyBaoCao.Text, cmbKyBaoCao, dtNgayBatDau, dtNgayKetThuc);
            }
            catch (Exception ex)
            {
                BasicForms.FrmExceptionNotifier.ShowAndLog(ex);
            }
        }

        private void btnPrint_Click(object sender, EventArgs e)
        {
            if (chkLocTheoNhanVien.Checked && cmbNhanVien.EditValue == null)
            {
                MessageBox.Show("Cần chọn điều kiện nhân viên");
                chkLocTheoNhanVien.Focus();
                return;
            }

            if (chkLocTheoMay.Checked && cmbMayTinh.EditValue == null)
            {
                MessageBox.Show("Cần chọn điều kiện lọc máy tính");
                cmbMayTinh.Focus();
                return;
            }


            DateTime ngayBatDau = new DateTime(); if (LocalSettings.HeThong.CheDoBiKiemTra) ngayBatDau = DateTime.Now.AddDays(-2); else ngayBatDau = dtNgayBatDau.DateTime; //DateTime ngayBatDau = dtNgayBatDau.DateTime;
            DateTime ngayKetThuc = dtNgayKetThuc.DateTime;
            if(!(FrmThamSoBaoCao.CheckKyBaoCaoVaThoiDiemKhoaSo(dtNgayBatDau, dtNgayKetThuc))) return;
            if(!(FrmThamSoBaoCao.CheckKyBaoCaoVaThoiDiemKhoaSo(dtNgayBatDau, dtNgayKetThuc))) return;
            string kyBaoCao = cmbKyBaoCao.Text;
            if (kyBaoCao == "Cả năm") kyBaoCao = "Năm " + GeneralLibs.Config.NamTaiChinh.ToString();
            else if (kyBaoCao == "Tùy chọn") kyBaoCao = string.Format("Từ ngày {0}/{1}/{2} đến ngày {3}/{4}/{5}",
                                       ngayBatDau.Day, ngayBatDau.Month, ngayBatDau.Year,
                                       ngayKetThuc.Day, ngayKetThuc.Month, ngayKetThuc.Year);

            SqlConnection con = new SqlConnection(GeneralLibs.LocalSettings.ConnectString);
            DsThongKeBanLe ds = new DsThongKeBanLe();
            BasicForms.FrmProgressBarDev.StartShowProgress();

            try
            {
                con.Open();
                SqlCommand cmd = con.CreateCommand();
                cmd.CommandTimeout = GeneralLibs.Config.TimeOut;
                cmd.CommandText = "Select_Detail_KhoanMucThongKeBanLe";
                cmd.CommandType = CommandType.StoredProcedure;
                if(chkLocTheoNhanVien.Checked) cmd.Parameters.AddWithValue("@UserID", cmbNhanVien.EditValue);
                if (chkLocTheoMay.Checked) cmd.Parameters.AddWithValue("@MayTinhID", cmbMayTinh.EditValue);
                cmd.Parameters.AddWithValue("@ThoiDiemDau", ngayBatDau);
                cmd.Parameters.AddWithValue("@ThoiDiemCuoi", ngayKetThuc);

                SqlDataAdapter da = new SqlDataAdapter(cmd);
                da.Fill(ds.Select_Detail_KhoanMucThongKeBanLe);

                //Nếu có cột TenNhomCha thì hiển thị để có thể lọc theo nhóm cha. Không có thì thôi chỉ hiện tên nhóm.
                try
                {
                    foreach (DataRow row in ds.Select_Detail_KhoanMucThongKeBanLe.Rows)
                    {
                        if (row["TenNhomCha"] is string && row["TenNhomCha"] != "")
                        {
                            row["TenNhomHangHoa"] = string.Format("{0} ({1})", row["TenNhomHangHoa"], row["TenNhomCha"]);
                        }
                    }
                }
                catch (Exception ex)
                { }

                int count = 0;
                if (!chkShowThongTinTonKho.Checked)
                {
                    gridControlThongKeBanLe.DataSource = ds.Select_Detail_KhoanMucThongKeBanLe;
                }
                else
                {
                    DataTable dt = ds.Select_Detail_KhoanMucThongKeBanLe;
                    dt.Columns.Add("TonKho",typeof(decimal));

                    foreach (DataRow row in dt.Rows)
                    {
                        BasicForms.FrmProgressBarDev.Status = string.Format("Đang xử lý {0}/{1}", count, dt.Rows.Count);
                        count++;

                        VatTuHangHoa vatTuHangHoa = DanhMucVatTuHangHoa.GetByMa((string)row["MaHangHoa"]);
                        TonKho tonToanBo = TonKho.CalculateTongTonTuThoiDiemKhoaSoGanNhatDenThoiDiemNhapVao(cmd, ngayBatDau, vatTuHangHoa.ID);
                        TonKho phatSinhNhapToanBo = TonKho.CalculatePhatSinhNhapToanBo(cmd, ngayBatDau, ngayKetThuc, vatTuHangHoa.ID);
                        TonKho phatSinhXuatToanBo = TonKho.CalculatePhatSinhXuatToanBo(cmd, ngayBatDau, ngayKetThuc, vatTuHangHoa.ID);
                        decimal soLuongTonToanBo = tonToanBo.SoLuong + phatSinhNhapToanBo.SoLuong - phatSinhXuatToanBo.SoLuong;

                        row["TonKho"] = soLuongTonToanBo;
                    }
                    gridViewThongKeBanLe.Columns["TonKho"].Visible = true;
                    gridControlThongKeBanLe.DataSource = dt;
                }
                FormatNumberInGridView(gridViewThongKeBanLe);
            }
            catch (Exception ex)
            {
                BasicForms.FrmExceptionNotifier.ShowAndLog(ex);
            }
            finally
            {
                if(con.State == ConnectionState.Open)con.Close();
                //con = null;
                BasicForms.FrmProgressBarDev.FinishShowProgress();
            }
        }

        private void btnPreview_Click(object sender, EventArgs e)
        {
            gridControlThongKeBanLe.ShowPrintPreview();
        }

        private void chkLocTheoNhanVien_CheckedChanged(object sender, EventArgs e)
        {
            cmbNhanVien.Visible = chkLocTheoNhanVien.Checked;
        }

        private void chkLocTheoMay_CheckedChanged(object sender, EventArgs e)
        {
            cmbMayTinh.Visible = chkLocTheoMay.Checked;
        }

        private void chkShowThongTinTonKho_CheckedChanged(object sender, EventArgs e)
        {
            if (chkShowThongTinTonKho.Checked)
            {
                btnPrint_Click(null, null);
            }
            else
            {
                gridViewThongKeBanLe.Columns["TonKho"].Visible = false;
            }
        }
    }
}
